﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Text;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using ShopNet.Model;

namespace ShopNet
{
    public partial class FimCompra : System.Web.UI.Page
    {
        #region Propriedades

        public new Shop Master
        {
            get
            {
                return ((Shop)(base.Master));
            }
        }

        private Usuario Us
        {
            get
            {
                MembershipUser user = Membership.GetUser();
                Usuario us = NServico.Db.Usuarios.FirstOrDefault(u => u.UserId == user.UserName);
                return us;
            }
        }

        private string UniqIdPedido
        {
            get
            {
                if (Session["UniqIdPedido"] == null) Response.Redirect("~/Cesta.aspx");
                return Session["UniqIdPedido"].ToString();
            }
        }

        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            lNumPedido.Text = UniqIdPedido;

            #region Envio de email

            string remetenteEmail = ConfigurationManager.AppSettings["RemetenteEmail"]; //O e-mail do remetente
            string passwordEmail = ConfigurationManager.AppSettings["PasswordEmail"];
            if (Us.UsuarioLogado == null)
            {
                Response.Redirect("~/Checkout/CheckoutVerifier.aspx", true);
                return;
            }
            Pedido ped = NServico.Db.Pedidos.SingleOrDefault(p => p.IdPedido.Equals(UniqIdPedido));

            #region dados do Pedido

            string dadospedido = string.Empty;
            List<string> paransPedido = new List<string>();

            paransPedido.Add(ped.Endereco);
            paransPedido.Add(ped.Numero);
            paransPedido.Add(ped.Complemento);
            paransPedido.Add(ped.Bairro);
            Cidade cid = NServico.Db.Cidades.SingleOrDefault(c => c.IdCidade == ped.IdCidade);
            paransPedido.Add(cid.Nome);
            paransPedido.Add(cid.Uf.Sigla);
            paransPedido.Add(cid.Uf.Pai.Nome);
            
            #region Item Pedido

            string item =@"
                <br />
                Itens comprados:
                <br />";

            foreach (ItemPedido itemPedido in NServico.Db.ItemPedidos.Where(ip=>ip.IdPedido==ped.IdPedido))
            {
                item += string.Format(@"
                <br />
<table border='0' width='80%'>
<tr><td>Produto</td><td>Preço unitário</td><td>Quantidade</td></tr>
<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>
</table><br /><br />
                ", itemPedido.Produto.Nome, itemPedido.Preco, itemPedido.Quantidade);
            }

            #endregion

            paransPedido.Add(item);

            dadospedido = string.Format(@"
            Pedido:<br /><br />
            Endereço:<br />
            {0} {1} {2}<br />
            {3} {4} <br />
            {5} {6}<br /><br />
            {7}
            ", paransPedido.ToArray());

            #endregion


            #region Tipo Pgto

            string tipoPgto = "Indeterminado";
            
            if (TiposPagamento.BancoBrasil.GetHashCode()==ped.TipoPagamento)
            {
                tipoPgto = "Banco do Brasil Dados para Deposito bla bla bla";
            }else if (TiposPagamento.Bradesco.GetHashCode()==ped.TipoPagamento)
            {
                tipoPgto = @"
                Bradesco Dados para Deposito:<br />
                <ul>
                    <li>Ag: 1602</li>
                    <li>No.:17274-0</li>
                    <li>Nome: Marcio rodrigues de oliveira</li>
                    <li>cnpj: 121.488.420.001-74</li>
                </ul><br /><br />
                ";
            }else if (TiposPagamento.Itau.GetHashCode()==ped.TipoPagamento)
            {
                tipoPgto = "Banco Itau Dados para Deposito bla bla bla";
            }

            #endregion
            
            #region Body

            MailMessage mail = new MailMessage
                                   {
                                       From = new MailAddress(remetenteEmail, "ShoP CarT", Encoding.UTF8),
                                       Subject = string.Format("Confirmação de Pedido {0}", UniqIdPedido),
                                       SubjectEncoding = Encoding.UTF8,
                                       Body = string.Format(@"
    Prezado(a) {0}
<br /><br />
    O pedido de Nº {1} foi confirmado com sucesso.
<br /><br />
    O Tipo de Pagamento foi: {2}
<br /><br />
{3}
<br /><br />
    Para garantir o sucesso da sua entrega, sugerimos que o responsável pelo recebimento confira o produto.
<br /><br />
    Se tiver alguma dúvida, entre em contato conosco pelo e-mail sac@reidobiscuit.com.br ou pelo telefone (32)3441-1334
<br /><br />
    Atenciosamente,<br />
    Rei do Biscuit<br />
    www.reidobiscuit.com.br<br /><br /><br /><br />

", Us.Nome, UniqIdPedido, tipoPgto, dadospedido),
                                       BodyEncoding = Encoding.UTF8,
                                       IsBodyHtml = true,
                                       Priority = MailPriority.Normal
                                   };

            #endregion

            #region Destinatarios

            mail.To.Add(Us.UsuarioLogado.Email);
            mail.Bcc.Add(remetenteEmail);

            #endregion
            
            #region Configuracao

            SmtpClient client = new SmtpClient
                                    {
                                        Credentials = new NetworkCredential(remetenteEmail, passwordEmail),
                                        Port = 587,
                                        Host = "smtp.gmail.com",
                                        EnableSsl = true
                                    };  //Adicionando as credenciais do seu e-mail e senha:

            #endregion

            #region Envio do email

            try
            {
                client.Send(mail);
                Master.ExibirMensagem(Shop.TipoMensagem.Success, "Envio do E-mail com sucesso");
            }

            catch (Exception ex)
            {
                Master.ExibirMensagem(Shop.TipoMensagem.Error, "Ocorreu um erro ao enviar:" + ex.Message);
            }

            #endregion

            #endregion

            Session.Remove("UniqIdPedido");
        }
    }
}